package com.ruoyi.learn.java.collection;

import java.util.*;

public class LinkedListDemo {
    public static void main(String[] args) {
        // ✅ 1. 创建 LinkedList（可以存储字符串）
        LinkedList<String> list = new LinkedList<>();

        // ✅ 2. 添加元素
        list.add("Apple");           // 添加到末尾
        list.add("Banana");
        list.add("Cherry");
        list.addFirst("First");      // 添加到开头
        list.addLast("Last");        // 添加到末尾（等同于 add）
        list.add(2, "Inserted");     // 在索引 2 处插入

        System.out.println("1. 初始列表: " + list);
        // 输出: [First, Apple, Inserted, Banana, Cherry, Last]

        // ✅ 3. 查询元素
        System.out.println("2. 第一个元素: " + list.getFirst());  // First
        System.out.println("3. 最后一个元素: " + list.getLast());  // Last
        System.out.println("4. 索引 3 的元素: " + list.get(3));    // Banana

        // ✅ 4. 修改元素
        list.set(1, "Orange");
        System.out.println("5. 修改索引 1 后: " + list);
        // 输出: [First, Orange, Inserted, Banana, Cherry, Last]

        // ✅ 5. 删除元素
        list.removeFirst();    // 删除第一个
        list.removeLast();     // 删除最后一个
        list.remove("Inserted");// 删除指定元素
        System.out.println("6. 删除后: " + list);
        // 输出: [Orange, Banana, Cherry]

        // ✅ 6. 遍历 LinkedList
        System.out.println("7. 遍历方式 1 - 增强 for 循环:");
        for (String fruit : list) {
            System.out.println("  " + fruit);
        }

        System.out.println("8. 遍历方式 2 - 迭代器:");
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            System.out.println("  " + it.next());
        }

        System.out.println("9. 遍历方式 3 - 列表迭代器（可反向）:");
        ListIterator<String> lit = list.listIterator();
        System.out.println("  正向:");
        while (lit.hasNext()) {
            System.out.println("    " + lit.next() + " (index: " + lit.nextIndex() + ")");
        }
        System.out.println("  反向:");
        while (lit.hasPrevious()) {
            System.out.println("    " + lit.previous());
        }

        // ✅ 7. 其他常用操作
        System.out.println("10. 列表大小: " + list.size());
        System.out.println("11. 是否包含 'Banana': " + list.contains("Banana"));
        System.out.println("12. 是否为空: " + list.isEmpty());

        // ✅ 8. 转换为数组
        String[] array = list.toArray(new String[0]);
        System.out.println("13. 转为数组: " + Arrays.toString(array));

        // ✅ 9. 清空列表
        list.clear();
        System.out.println("14. 清空后是否为空: " + list.isEmpty());
    }
}
